#include "epd_show.h"
#include "appconfig.h"
#include "sysmanage.h"

/*
#define USEING_DEBUG_EPD
#ifdef USEING_DEBUG_EPD
#define printf       printf
#else
#define printf(...)       
#endif*/

#define SHOW_EVT_SIZE	5
static u16_t showEvt[SHOW_EVT_SIZE] = {0}; //显示事件

static u8_t progress = 0;

u8_t* get_progress(void)
{
	return (u8_t*)&progress;
}

STATUS send_epd_mail(u16_t evt)
{
	return sendEvtProcess(showEvt,SHOW_EVT_SIZE,evt);
}


void ICACHE_FLASH_ATTR
epd_show_thread_entry(void *arg)
{
	printf("%s\n\r",__FUNCTION__);
	EPD_W21_reset();// 复位模块
	while(1)
	{
		u16_t evt = 0;

		entry_work_task(SHOW_TASK_WORK);
		evt = EvtRecvProcess(showEvt,SHOW_EVT_SIZE);//事件接收
		if(evt!= 0)
		{
			set_rtc_system_event_bit(EVT_START_SHOW, TRUE);//开始显示
			set_rtc_system_event_bit(EVT_SHOW_BATLOW, FALSE);//要显示其他的东西所以取消电池电量低标记
			if(evt & EPD_EVT_BUFFULL)//现存显示
			{
				u8_t *buf;
				printf("EPD_EVT_BUFFULL\n");
				buf = (u8_t*)show_buffer_get();
				epd_show_update(2,1,buf,NULL);
			}
			else if(evt & EPD_EVT_FULL)//全屏更新
			{
				u8_t *buf;
				printf("EPD_EVT_FULL\n");
				buf = (u8_t*)show_buffer_get();
				eeprom_load_data(buf);
				epd_show_update(2,1,buf,NULL);
			}
			else if(evt & EPD_EVT_FULLID)
			{
				u8_t *buf;
				printf("EPD_EVT_FULL\n");
				buf = (u8_t*)show_buffer_get();
				eeprom_load_IDdata(buf);
				epd_show_update(2,1,buf,NULL);
			}
			else if(evt & EPD_EVT_PART)//部分更新
			{
				u8_t *buf;
				printf("EPD_EVT_PART\n");
				buf = (u8_t*)show_buffer_get();
				if(is_key_evt_wakeup() == 1)//按键唤醒
				{
					eeprom_load_IDdata(buf);
				}
				else
				{
					eeprom_load_data(buf);
				}
				
				epd_update_hint(buf);//更新提示
			}
			else if(evt & EPD_EVT_FINIT)//全屏初始化
			{
				printf("EPD_EVT_FINIT\n");
				epd_show_init();
			}
			else if(evt & EPD_EVT_UPDATE)//更新进度
			{
				u8_t *value;

				printf("EPD_EVT_UPDATE\n");
				value = get_progress();
				epd_update_progress(*value);
			}
			else if(evt & EPD_EVT_CLOSE)
			{
				printf("EPD_EVT_UPDATE\n");
				epd_module_close();
			}
			else if(evt & EPD_EVT_BATAlA)//电池低压提示
			{
				u8_t *buf = NULL;
				
				printf("EPD_EVT_BATAlA\n");
				buf = (u8_t*)show_buffer_get();
				eeprom_load_data(buf);
				epd_bat_alarm_hint(buf);
				set_rtc_system_event_bit(EVT_SHOW_BATLOW, TRUE);//电池电量低
			}
			else if(evt & EPD_EVT_CSQAlA)//信号太差
			{
				u8_t *buf = NULL;
				
				printf("EPD_EVT_CSQAlA\n");
				buf = (u8_t*)show_buffer_get();
				epd_csq_alarm_hint(buf);
			}
			else if(evt & EPD_EVT_SIMAlA)//sim卡欠费
			{
				u8_t *buf = NULL;
				
				printf("EPD_EVT_SIMAlA\n");
				set_rtc_system_event_bit(EVT_NET_EXP,TRUE);
				buf = (u8_t*)show_buffer_get();
				eeprom_load_data(buf);
				epd_sim_alarm_hint(buf);
			}
			else if(evt & EPD_EVT_TCPAlA)//tcp链接服务器
			{
				u8_t *buf = NULL;
				
				printf("EPD_EVT_TCPAlA\n");
				buf = (u8_t*)show_buffer_get();
				eeprom_load_data(buf);
				epd_tcp_alarm_hint(buf);
			}
			else if(evt & EPD_EVT_NoneSIMALA)//没有配置网络
			{
				u8_t *buf = NULL;
				
				printf("EPD_EVT_NoneSIMALA\n");
				buf = (u8_t*)show_buffer_get();
				eeprom_load_IDdata(buf);
				epd_noneSIM_alarm_hint(buf);
			}

			vTaskDelay(1800 / portTICK_RATE_MS);
			set_rtc_system_event_bit(EVT_START_SHOW, FALSE);//显示结束
		}
		else
		{
			exit_work_task(SHOW_TASK_WORK);//退出任务
			vTaskDelay(10 / portTICK_RATE_MS);
		}
	}
	vTaskDelete(NULL);
}

int epd_show_thread_init(void)
{
	xTaskCreate(epd_show_thread_entry, "show", 512, NULL, 3, NULL);

	return 0;
}

